package com.bana.fvs.protocol;

import com.bana.fvs.code.*;
import com.bana.fvs.model.Lamp;

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 查询雾灯状态
 */
public class QueryLampsStatus {
    public int getId()
    {
        return 0x21;
    }

    public byte[] toBuffer(int kzqbsm,int ksdz,int jsdz)
    {
        byte[] buffer=new byte[8];
        buffer[0]=(byte)0x81;
        buffer[1]=(byte)kzqbsm;
        buffer[2]=(byte)getId();
        buffer[3]=(byte)(ksdz%128);
        buffer[4]=(byte)(ksdz/128);
        buffer[5]=(byte)(jsdz%128);
        buffer[6]=(byte)(jsdz/128);
        buffer[7]=(byte)0xff;
        return buffer;
    }

    public List<Lamp> toModel(byte[] buffer) throws IOException {

        ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
        DataInputStream dis = new DataInputStream(bais);
        dis.skipBytes(1);
        byte kzqbsm=dis.readByte();
        dis.skipBytes(1);

        List<Lamp> lamps=new ArrayList<>();
        int count=(buffer.length-4)/6;
        for(int i=0;i<count;++i)
        {
            Lamp lamp=new Lamp();
            lamp.setKzqbsm(kzqbsm);
            short s1=dis.readByte();
            short s2=dis.readByte();
            short s3=dis.readByte();
            if(s1==0x7f&&s2==0x40&&s3==0x7f)
            {
                lamp.setWdljzt(LampStatus.Disconnection);
                lamp.setMzt(LampDoorStatus.Steal);
                lamp.setWdzt(LampTemperatureStatus.TooHigh);
                lamp.setDyzt(LampVoltageStatus.TooLow);
                lamp.setSbpd(LampPairStatus.Disconnection);
                lamp.setLedzt(LampLedStatus.Close);
                lamp.setLdzt(LampRadarStatus.Close);
                lamp.setWdwd(0);
                lamp.setXdcdy(0);
                lamp.setTyndy(0);
                dis.skipBytes(3);
            }
            else
            {
                lamp.setWdljzt(LampStatus.Normal);
                lamp.setMzt((s1&0x02)==0?LampDoorStatus.Normal:LampDoorStatus.Steal);
                lamp.setWdzt((s1&0x04)==0?LampTemperatureStatus.Normal:LampTemperatureStatus.TooHigh);
                lamp.setDyzt((s1&0x08)==0?LampVoltageStatus.Normal:LampVoltageStatus.TooLow);
                lamp.setSbpd((s1&0x10)==0?LampPairStatus.Normal:LampPairStatus.Disconnection);
                lamp.setLedzt((s1&0x20)==0?LampLedStatus.Close:LampLedStatus.Open);
                lamp.setLdzt((s1&0x40)==0?LampRadarStatus.Close:LampRadarStatus.Open);
                lamp.setDdyzt((s2&0x40)==0?LampVoltageStatus.Normal:LampVoltageStatus.TooLow);
                short s4=dis.readByte();
                lamp.setXdcdy(s4*128+s3);
                short s5=dis.readByte();
                short s6=dis.readByte();
                if(s6==0)
                {
                    lamp.setWdwd(s5);
                }
                else
                {
                    lamp.setWdwd(-s5);
                }
            }
            if(lamp.getMzt()==LampDoorStatus.Normal&&
                    lamp.getWdzt()==LampTemperatureStatus.Normal&&
                    lamp.getDyzt()==LampVoltageStatus.Normal&&
                    lamp.getWdljzt()==LampStatus.Normal)
            {
                lamp.setSbzt(DeviceStatus.Noraml);
            }
            else
            {
                lamp.setSbzt(DeviceStatus.Error);
            }
            lamps.add(lamp);
        }
        dis.close();
        bais.close();
        return lamps;
    }
}
